package cn.impl;

import cn.annotation.EquipmentLog;
import cn.annotation.Log;
import cn.basic.HibBaseDAOImpl;
import cn.basic.iHibBaseDAO;
import cn.common.properties.EquipmentType;
import cn.common.properties.LogOperType;
import cn.dao.ApplyDAO;
import cn.model.TApply;
import cn.model.VApply;
import org.springframework.stereotype.Component;

import java.util.List;

@Component("applydao")
public class ApplyDAOImpl implements ApplyDAO {

    //连接数据库操作层接口,实现业务与数据的交换
    private iHibBaseDAO bdao= null;

    public ApplyDAOImpl(){
        bdao = new HibBaseDAOImpl();
    }

    /**
     * 添加一条申请信息
     *
     * @param apply 对象
     * @return 添加成功返回受影响的行数
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.ADD,operationName="添加一条设备申请信息")
    @Log(isSaveLog=true,operationType= LogOperType.ADD,operationName="添加一条设备申请信息")
    @Override
    public int addApply(TApply apply) {
        return (Integer) bdao.insert(apply);
    }

    /**
     * 删除一条申请信息
     *
     * @param applyid 编号
     * @return 添加成功返回受影响的行数
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.DELETE,operationName="删除一条设备申请信息")
    @Log(isSaveLog=true,operationType= LogOperType.DELETE,operationName="删除一条设备申请信息")
    @Override
    public boolean deleteApply(int applyid) {
        return bdao.delete(applyid);
    }

    /**
     * 修改一条申请信息
     *
     * @param apply 需要修改的对象
     * @return
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.MODIFY,operationName="修改一条设备申请信息")
    @Log(isSaveLog=true,operationType= LogOperType.MODIFY,operationName="修改一条设备申请信息")
    @Override
    public boolean modifyApply(TApply apply) {
        return bdao.update(apply);
    }

    /**
     * 修改一条状态信息
     *
     * @param auditstatus 需要修改的对象
     * @return
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.MODIFY,operationName="用过申请编号修改一条设备申请信息转态")
    @Log(isSaveLog=true,operationType= LogOperType.MODIFY,operationName="用过申请编号修改一条设备申请信息转态")
    @Override
    public boolean modifyApplyById(int applyid,int auditstatus) {
        String hql ="update T_Apply set auditstatus = ? where applyid = ?";
        Object para[] ={auditstatus,applyid};
        return bdao.update(hql,para);
    }

    /**
     * 获取所有维护信息的列表
     *
     * @param currentPage 按分页查询的当前页
     * @param pageSize    按分页查询的每页数量
     * @return List
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.QUERY,operationName="查询所用设备申请信息")
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="查询所用设备申请信息")
    @Override
    public List<VApply> getAllApplyList(int currentPage, int pageSize) {
        String hql = "from VApply";
        return bdao.selectByPage(hql,currentPage,pageSize);
    }


    /**
     * 根据条件获取申请信息的列表
     * @param wherecondition 组合查询条件字符串,
     * @param currentPage    按分页查询的当前页
     * @param pageSize       按分页查询的每页数量
     * @return List
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.QUERY,operationName="查询设备申请信息列表")
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="查询设备申请信息列表")
    @Override
    public List<VApply> getApplyListByPage(String wherecondition, int currentPage, int pageSize) {
        String hql = "from VApply";
        if (wherecondition!=null && !wherecondition.equals("")){
            hql+=wherecondition;
        }
        if (wherecondition == null && wherecondition.equals("")){
            hql += "order by applicationTime desc";
        }
        return bdao.selectByPage(hql,currentPage,pageSize);
    }

    /**
     * 根据状态查询VApply对象
     * @param auditstatus
     * @param currentPage    查询开始的页数
     * @param pageSize       查询要求的每页的记录数
     * @return List<VOrder>
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.QUERY,operationName="通过设备申请信息状态查询设备申请信息列表")
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="通过设备申请信息状态查询设备申请信息列表")
    @Override
    public List<VApply> getVApplyByStatus(int auditstatus, int currentPage, int pageSize) {
        String hql = "from VApply where auditstatus = ?";
        Object[] param ={auditstatus};
        return bdao.selectByPage(hql,param,currentPage,pageSize);
    }

    /**
     * 根据状态查询VApply对象
     *
     * @param userid
     * @param currentPage 查询开始的页数
     * @param pageSize    查询要求的每页的记录数
     * @return List<VOrder>
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.QUERY,operationName="通过用户编号查询当前用户申请设备信息列表")
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="通过用户编号查询当前用户申请设备信息列表")
    @Override
    public List<VApply> getVApplyByUser(String userid, int currentPage, int pageSize) {
        String hql = "from VApply where userid = ?";
        Object[] param ={userid};
        return bdao.selectByPage(hql,param,currentPage,pageSize);
    }

    /**
     * 根据条件获取符合条件的申请的数量
     *
     * @param wherecondition
     * @return
     */
    @Override
    public int getApplyAmount(String wherecondition) {
        String hql = "select count(*) from VApply";
        if (wherecondition!=null && !wherecondition.equals("")){
            hql +=wherecondition;
        }
        if (wherecondition==null && wherecondition.equals("")){
            hql += "order by createtime desc";
        }
        return bdao.selectValue(hql);
    }

    /**
     * 数量
     *
     * @return
     */
    @Override
    public int getApplyAllAmount(String userid) {
        String hql = "select count(*) from VApply where  userid = ?";
        Object[] param ={userid};
        return bdao.selectValue(hql,param);
    }

    /**
     * 通过申请ID查询
     *
     * @param applyid 申请编号
     * @return 返回申请信息列表
     */
    @Override
    public VApply getApplyById(int applyid) {
        return (VApply) bdao.findById(VApply.class, applyid);
    }
}
